# Typescript 中其他常见类型
我们上一节了解了 TypeScript 中的原始类型,其实还有一些常见的类型没有涉及。
比如计算机类型系统理论中的顶级类型:
- any
- unknown
比如类型系统中的底部类型:
- never
再比如非原始类型(non-primitive type):
- object
当然还有比较常见的数组、元组等等。
# any
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。
这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。
这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用any类型来标记这些变量:
let notSure: any = 4;
notSure = "maybe a string instead";
@前端进阶之旅: 代码已经复制到剪贴板
any类型是多人协作项目的大忌,很可能把Typescript变成AnyScript,通常在不得已的情况下,不应该首先考虑使用此类型。
# unknown
unknown 是 TypeScript 3.0 引入了新类型,是 any 类型对应的安全类型。
unknown 和 any 的主要区别是 unknown 类型会更加严格:在对unknown类型的值执行大多数操作之前,我们必须进行某种形式的检查,而在对 any 类型的值执行操作之前,我们不必进行任何检查。
我们先看一下他跟 any 的共同点,它跟 any 一样,可以是任何类型:
let value: any;
value = true; // OK
value = 1; // OK
value = "Hello World"; // OK
value = Symbol("type"); // OK
value = {} // OK
value = [] // OK
@前端进阶之旅: 代码已经复制到剪贴板
如果我们换成 unknown,结果一样
let value: unknown;
value = true; // OK
value = 1; // OK
value = "Hello World"; // OK
value = Symbol("type"); // OK
value = {} // OK
value = [] // OK
@前端进阶之旅: 代码已经复制到剪贴板
那我们看看它们的区别在哪里:
